package reflection;

import org.junit.Test;

import java.util.Arrays;

//本类用于测试反射技术，假装Student类是别人写的
public class TestReflection {

    //1.创建程序的入口函数main()--不用
    /*单元测试方法：是Java中最小的测试单位，使用灵活，推荐指数：5颗星
     * 语法要求：@Test + public + void + 没有参数
     * 注意：使用时需要导包：Add JUnit 4 library to the build path
     * 导包后的效果：import org.junit.Test
     * 执行方式：选中方法名前绿色的小三角，成功运行会有绿色的小对勾
     * */
    //2.通过单元测试方法，获取目标类Student对应的字节码对象




    //4.通过单元测试方法，获取Student类中的成员变量
    @Test
    public void getFie() throws ClassNotFoundException {
        //练习获取字节码对象的3种方式
        Class<?> Clazz1 = Class.forName("reflection.TestReflection");
        Class<?> Clazz2 = Student.class;
        Class<?> Clazz3 = new Student().getClass();
        System.out.println(Clazz1);//打印的是Student类对应的字节码对象
        System.out.println(Clazz1.getName());//获取当前字节码对象clazz1的名字
        System.out.println(Clazz2.getSimpleName()); //通过字节码对象，获取Student类的类名
        System.out.println(Clazz3.getPackage());//通过字节码对象，获取Student类对应的包对象
        System.out.println(Clazz3.getPackage().getName()); //通过字节码对象，先获取Student类对应的包对象，再获取这个包对象的名字


    }












    //3.通过单元测试方法练习引用类型数组的定义与遍历
    @Test
    public void getStu(){
        //1.创建Student类的3个对象
        Student s1 = new Student("张三", 3);
        Student s2 = new Student("李四", 4);
        Student s3 = new Student("王五", 5);
        //2.创建数组将刚刚的3个对象存入数组中
        Student[] s = {s1, s2, s3};
        //3.直接打印数组，查看数组中的元素
        System.out.println(Arrays.toString(s));
        //4.遍历学生数组，拿到每一个学生对象，做进一步的操作
        for (Student stu : s) {
            //System.out.println(stu);
            stu.play();//通过遍历到的对象，执行play()
            System.out.println(stu.age);//通过遍历到的对象，打印age属性
        }
    }
}
